From 81d5fda120a72a1aeaf6681139b5e6d42814f038 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Wed, 3 Sep 2008 19:23:49 +0000 Subject: [PATCH] avltree: Add function 'avltree_clear'. --- gpsbabel/avltree.c | 25 ++++++++++++++++++++----- gpsbabel/avltree.h | 3 +++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/gpsbabel/avltree.c b/gpsbabel/avltree.c index c90c5680f..2726ef713 100644 --- a/gpsbabel/avltree.c +++ b/gpsbabel/avltree.c @@ -87,17 +87,32 @@ avltree_init(const int options, const char *module) return tree; } +/* Delete all items of tree [tree] */ -/* Destroy an AVL Tree */ - -void -avltree_done(avltree_t *tree) +int +avltree_clear(avltree_t *tree) { + int res; + AVLTREE_CHECK_HANDLE(tree); + res = tree->count; avltree_save_key(tree, NULL); - if (tree->count) + if (res) { avltree_node_free(tree, tree->root); + /* avltree_node_free doesn't touch 'count' */ + tree->count = 0; + tree->root = NULL; + } + return res; +} + +/* Destroy an AVL Tree */ + +void +avltree_done(avltree_t *tree) +{ + avltree_clear(tree); xfree(tree); } diff --git a/gpsbabel/avltree.h b/gpsbabel/avltree.h index d8c9ddb4e..8df8ffb67 100644 --- a/gpsbabel/avltree.h +++ b/gpsbabel/avltree.h @@ -66,6 +66,9 @@ avltree_t *avltree_init(const int options, const char *module); /* Destroy an AVL Tree */ void avltree_done(avltree_t *tree); +/* Delete all items of tree [tree]; returns number of deleted items */ +int avltree_clear(avltree_t *tree); + /* Get number of items in tree */ int avltree_count(const avltree_t *tree); -- 2.30.2